/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wasolicitudesfiec.Administracion.Carreras.dataproviders;

import com.sun.data.provider.DataProviderException;
import com.sun.data.provider.FieldKey;
import com.sun.data.provider.RowKey;
import com.sun.data.provider.impl.AbstractTableDataProvider;
import com.sun.data.provider.impl.IndexRowKey;
import entidad.Especializacion;
import entidad.Parametro;
import java.util.Vector;

/**
 *
 * @author Administrador
 */
public class Dp_Especializacion extends AbstractTableDataProvider {

	private Vector<Reg_Especializacion> listaReg_Especializacion;

	public Dp_Especializacion() {
		agregarKey("especializacion", "Especialización");
		agregarKey("idEspecializacion", "Identificador Especialización");
		agregarKey("coordinador", "Coordinador");
		agregarKey("idCoordinador", "Identificador Coordinador");
		agregarKey("activar", "Activar");
		agregarKey("eliminar", "Eliminar");
	}

	public void setListaEspecializacion(Vector<Especializacion> listaEspecializacion) {
		Reg_Especializacion reg_Especializacion;
		listaReg_Especializacion = new Vector<Reg_Especializacion>();
		for (Especializacion especializacion : listaEspecializacion) {
//				System.out.println("especializacion: "+especializacion.toString());
			reg_Especializacion = new Reg_Especializacion();
			reg_Especializacion.setActivar(especializacion.isActivo());
			if (especializacion.getCoordinador() != null) {
				reg_Especializacion.setCoordinador(especializacion.getCoordinador().toString());
				reg_Especializacion.setIdCoordinador(especializacion.getCoordinador().getIdProfesor());
			} else {
				reg_Especializacion.setCoordinador("");
				reg_Especializacion.setIdCoordinador(-1);
			}
			reg_Especializacion.setEliminar(false);
			reg_Especializacion.setEspecializacion(especializacion.getNombre());
			reg_Especializacion.setIdEspecializacion(especializacion.getIdParametro());
			listaReg_Especializacion.add(reg_Especializacion);
		}
	}

	public Vector<Especializacion> getListaEspecializacion() {
		Vector<Especializacion> listaEspecializacion = new Vector<Especializacion>();
		Especializacion especializacion;
		if (listaReg_Especializacion != null) {
			for (Reg_Especializacion reg_Especializacion : listaReg_Especializacion) {
				especializacion = new Especializacion();
				especializacion.setActivo(reg_Especializacion.isActivar());
				especializacion.setEliminar(reg_Especializacion.isEliminar());
				especializacion.setNombre(reg_Especializacion.getEspecializacion());
				especializacion.setIdParametro(reg_Especializacion.getIdEspecializacion());
				especializacion.setFkCoordinador(reg_Especializacion.getIdCoordinador());
				listaEspecializacion.add(especializacion);
				System.out.println("especializacion.getFkCoordinador(): " + especializacion.getFkCoordinador());
				System.out.println("reg_Especializacion.getIdCoordinador(): " + reg_Especializacion.getIdCoordinador());
			}
		}
		return listaEspecializacion;
	}

	private void agregarKey(String key_string, String display_name) {
		FieldKey key;
		key = new FieldKey(key_string);
		key.setDisplayName(display_name);
		addFieldKey(key);
	}

	@Override
	public Class getType(FieldKey fieldKey) throws DataProviderException {
		String fieldId = fieldKey.getFieldId();
		if (fieldId.equals("especializacion")) {
			return String.class;
		} else if (fieldId.equals("idEspecializacion")) {
			return Integer.class;
		} else if (fieldId.equals("coordinador")) {
			return String.class;
		} else if (fieldId.equals("idCoordinador")) {
			return Integer.class;
		} else if (fieldId.equals("activar")) {
			return Boolean.class;
		} else if (fieldId.equals("eliminar")) {
			return Boolean.class;
		}
		return String.class;
	}

	@Override
	public boolean isReadOnly(FieldKey fieldKey) throws DataProviderException {
		System.out.println("isReadOnly");
		return false;
	}

	@Override
	public int getRowCount() throws DataProviderException {
		if (listaReg_Especializacion != null) {
			return listaReg_Especializacion.size();
		}
		return 0;
	}

	@Override
	public Object getValue(FieldKey fieldKey, RowKey row) throws DataProviderException {
		int indice = ((IndexRowKey) row).getIndex();
		if (fieldKey == null) {
			return "";
		}
		Reg_Especializacion reg_especializacion = listaReg_Especializacion.get(indice);
		String fieldId = fieldKey.getFieldId();
//		System.out.println("index:" + indice + " fieldKey.getFieldId():" + fieldId);
		if (fieldId.equals("especializacion")) {
			return reg_especializacion.getEspecializacion();
		} else if (fieldId.equals("idEspecializacion")) {
			return reg_especializacion.getIdEspecializacion();
		} else if (fieldId.equals("coordinador")) {
			return reg_especializacion.getCoordinador();
		} else if (fieldId.equals("idCoordinador")) {
			return reg_especializacion.getIdCoordinador();
		} else if (fieldId.equals("activar")) {
			return reg_especializacion.isActivar();
		} else if (fieldId.equals("eliminar")) {
			return reg_especializacion.isEliminar();
		}

		return fieldId + indice;
	}

	@Override
	public void setValue(FieldKey fieldKey, RowKey row, Object value) throws DataProviderException {
		int indice = ((IndexRowKey) row).getIndex();
		String fieldId = fieldKey.getFieldId();
		System.out.println("setValue");
		System.out.println("index:" + indice + " fieldKey.getFieldId():" + fieldId);
		Reg_Especializacion reg_especializacion = listaReg_Especializacion.get(indice);
		if (fieldId.equals("especializacion")) {
			reg_especializacion.setEspecializacion((String) value);
		} else if (fieldId.equals("idEspecializacion")) {
			reg_especializacion.setIdEspecializacion((Integer) value);
		} else if (fieldId.equals("coordinador")) {
			reg_especializacion.setCoordinador((String) value);
		} else if (fieldId.equals("idCoordinador")) {
			reg_especializacion.setIdCoordinador((Integer) value);
		} else if (fieldId.equals("activar")) {
			reg_especializacion.setActivar((Boolean) value);
		} else if (fieldId.equals("eliminar")) {
			reg_especializacion.setEliminar((Boolean) value);
		}

	}

	@Override
	public boolean canInsertRow(RowKey beforeRow) throws DataProviderException {
		return false;
	}

	@Override
	public RowKey insertRow(RowKey beforeRow) throws DataProviderException {
		throw new UnsupportedOperationException("Not supported yet.");
	}

	@Override
	public boolean canAppendRow() throws DataProviderException {
		return false;
	}

	@Override
	public RowKey appendRow() throws DataProviderException {
		throw new UnsupportedOperationException("Not supported yet.");
	}

	@Override
	public boolean canRemoveRow(RowKey row) throws DataProviderException {
		return true;
	}

	@Override
	public void removeRow(RowKey row) throws DataProviderException {
		throw new UnsupportedOperationException("Not supported yet.");
	}
}
